package com.ruoyi.system.mapper;

import com.ruoyi.common.core.domain.entity.File;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface FileMapper {

    // 名称冲突校验
    int checkNameConflict(
            @Param("parentId") Long parentId,
            @Param("fileName") String fileName,
            @Param("label") String label,
            @Param("fileId") Long fileId
    );

    // 更新文件信息
    int updateFileNameAndLabel(
            @Param("fileId") Long fileId,
            @Param("fileName") String fileName,
            @Param("label") String label,
            @Param("operator") String operator
    );

    List<File> selectFiles(File file);

    /**
     * 找出当前文件夹下所有的子集文件及文件夹
     * @return
     */
    List<File> selectFilesByParent(File file);

    List<File> selectFilesWithPermission(@Param("roleIds") List<Long> roleIds, @Param("userId") Long userId, @Param("file") File file);

    /**
     * 根据文件名和用户ID查询文件
     * @param fileName 文件名
     * @param userId 用户ID
     * @return 文件实体
     */
    File findFileByNameAndUserId(@Param("fileName") String fileName, @Param("userId") Long userId);

    /**
     * 插入文件信息
     * @param file 文件实体
     */
    void insertFile(File file);

    /**
     * 根据ID查询文件信息
     * @param id 文件ID
     * @return
     */
    File selectFileById(Long id);

    /**
     * 批量插入文件信息
     * @param fileList 文件实体列表
     */
    void batchInsertFile(@Param("fileList") List<File> fileList);

    /**
     * 批量删除文件（根据条件）
     * @param fileList 文件实体列表
     */
    void batchDeleteFilesByCondition(@Param("fileList") List<File> fileList);

    List<File> selectChildrenFileList(Long id);

    /**
     * 真正删除文件 用于文件更新
     */
    void realDeleteFile(Long id);
}